// pages/publish/publish.js

var app = getApp()
var api = require("../../config/api")
var COS = require("../../utils/cos-wx-sdk-v5")
//加;
 var cos;

Page({

  /**
   * 页面的初始数据
   */
  data: {
    imageList:[],
    content:"",
    school:"",
    topicTitle:"选择需要发布的物品类型",
    topicId:null,
    dealStatus:-1
  },

  updateDealStatus(e){
    console.log(e)
    this.setData({
      dealStatus:e
    })
  },


  onClickDeal(){
    wx.navigateTo({
      url: '/pages/deal/deal',
    })
  },

  getSchool(){
    wx.navigateTo({
      url: '/pages/pubSchool/pubSchool',
    })
  },

  updateSchool(e){
    console.log(e)
    this.setData({
      school:e
    })
  },

  resetData() {
    this.setData({
      imageList:[],
      content:"",
      school:"",
      topicTitle:"请选择合适的话题",
      topicId:null,
    })

  },
  publishNews(){
    //发布至少选择一张图片
    if(this.data.imageList.length<1){
      wx.showToast({
        title: '至少选择一张图片',
        icon:'error'
      })
      return
    }
    //发布内容不能为空
    if(this.data.content.length<1){
      wx.showToast({
        title: '内容不能为空',
        icon:'error'
      })
      return
    }
    //选择学校
    if(!this.data.school){
      wx.showToast({
        title: '请选择学校',
        icon:'error'
      })
      return
    }
    //选择物品类型
    if(!this.data.topicId){
      wx.showToast({
        title: '请选择物品类型',
        icon:'error'
      })
      return
    }
    //选择发布类型
    if(this.data.dealStatus == -1){
      wx.showToast({
        title: '请选择发布类型',
        icon:'error'
      })
      return 
    }
    wx.showLoading({
      title: '正在加紧发布中...',
    })
    console.log(this.data.imageList)
    wx.request({
      url: api.NewsAPI,
      data:{
        cover:this.data.imageList[0].cos_path,
        content:this.data.content,
        deal_status:this.data.dealStatus,
        topic:this.data.topicId,
        school:this.data.school.id,
        imageList:this.data.imageList
      },
      header:{
        Authorization:app.globalData.userInfo?app.globalData.userInfo.token:null
      },
      method:'POST',
      dataType:'json',
      responseType:'text',
      success:(res) => {
        if(res.statusCode==201){
          wx.navigateTo({
            url: '/pages/publishSuccess/publishSuccess',
          })
        }else {
          wx.showToast({
            title: '服务器错误!',
            icon:'error'
          })
        }
      },
      fail:(res) => {
        wx.showToast({
          title: '客户端错误!',
          icon:'none'
        })
      },
      complete:(res) => {
        wx.hideLoading()
      }
    })
  },



  updateTopic(item){
    this.setData({
      topicId:item.id,
      topicTitle:item.title
    })
  },

  uploadImage(){
    wx.chooseMedia({
      count:9,
      sizeType:['original','compressed'],
      sourceType:['album','camera'],
      success:(res) => {
          var oldLength = this.data.imageList.length
          //最多上传9张
          var totalCount = oldLength + res.tempFiles.length
          if(totalCount>9){
            wx.showToast({
              title: '图片不能大于9张!',
              icon:'error'
            })
            return 
          }
          console.log(res)   
        //本地图片在页面预览
        this.setData({
            imageList:this.data.imageList.concat(res.tempFiles)
          })


          //将图片上传到云端数据库
          //去某个地方获取临时密钥
           cos = new COS({
            SimpleUploadMethod: 'putObject', // 强烈建议，高级上传、批量上传内部对小文件做简单上传时使用 putObject,SDK 版本至少需要v1.3.0
            // 必选参数
            getAuthorization: function (options, callback) {
                // 服务端 JS 和 PHP 示例：https://github.com/tencentyun/cos-js-sdk-v5/blob/master/server/
                // 服务端其他语言参考 COS STS SDK ：https://github.com/tencentyun/qcloud-cos-sts-sdk
                // STS 详细文档指引看：https://cloud.tencent.com/document/product/436/14048
                wx.request({
                    url: 'http://127.0.0.1:8000/api/credential/',
                    data: {
                        // 可从 options 取需要的参数
                    },
                    success: function (result) {
                        const data = result.data;
                        const credentials = data && data.credentials;
                        if (!data || !credentials) return console.error('credentials invalid');
                        callback({
                            TmpSecretId: credentials.tmpSecretId,
                            TmpSecretKey: credentials.tmpSecretKey,
                            // v1.2.0之前版本的 SDK 使用 XCosSecurityToken 而不是 SecurityToken
                            SecurityToken: credentials.sessionToken,
                            // 建议返回服务器时间作为签名的开始时间，避免用户浏览器本地时间偏差过大导致签名错误
                            StartTime: data.startTime, // 时间戳，单位秒，如：1580000000
                            ExpiredTime: data.expiredTime, // 时间戳，单位秒，如：1580000900
                        });
                    }
                });
            }
        });

        for(var index in res.tempFiles){
          let imageFilePath = res.tempFiles[index].tempFilePath
          var filePathSplit = imageFilePath.split('.')
          var ext = filePathSplit[filePathSplit.length - 1]
          //创建随机字符串
          let randomString = Math.random().toString(36).slice(-8) + String(new Date().getTime())
          var fileKey = randomString + '.' + ext
          //新加入的图片在整个imageList中的下标
          var targetIndex = oldLength + index
          this.setData({
            ["imageList["+ targetIndex +"].key"]:fileKey
          })
          //这里一定要加; 否则会报错
           var that = this;
           (function(idx){
            cos.uploadFile({
              Bucket: 'zj-1323324849', /* 填写自己的 bucket，必须字段 */
              Region: 'ap-nanjing',     /* 存储桶所在地域，必须字段 */
              Key: fileKey,              /* 存储在桶里的对象键（例如:1.jpg，a/b/test.txt，图片.jpg）支持中文，必须字段 */
              FilePath: imageFilePath, /* 上传文件路径，必须字段 */
              SliceSize: 1024 * 1024 * 5,     /* 触发分块上传的阈值，超过5MB使用分块上传，小于5MB使用简单上传。可自行设置，非必须 */
              onProgress: (progressData) => {
                 that.setData({
                   ["imageList["+ idx +"].percent"]:progressData.percent * 100
                 })
              }
          }, (err, data) => {
              if (err) {
                wx.showToast({
                  title: '上传失败',
                  icon:'error'
                })
                that.setData({
                  ["imageList["+ idx +"].error"]:true,
                  ["imageList["+ idx +"].percent"]:100
                })
              } else {
                that.setData({
                  ["imageList["+ idx +"].cos_path"]:"https://"+data.Location
                })
                //测试
                console.log(data)
              }
          });
           })(targetIndex)

        }

      }
    })
  },

  //移除选中的图片
  removeImage(event){
    //判断是否正在上传，如果正在上传就终止，否则删除
    //删除图片，终止&删除
    var index = event.currentTarget.dataset['index']
    var item = event.currentTarget.dataset['item']
    if(item.percent==100){
      cos.deleteObject({
        Bucket: 'zj-1323324849', /* 填入您自己的存储桶，必须字段 */
        Region: 'ap-nanjing',  /* 存储桶所在地域，例如ap-beijing，必须字段 */
        Key: item.key /* 存储在桶里的对象键（例如1.jpg，a/b/test.txt），必须字段 */
    }, (err, data) => {
      if(err){
        wx.showToast({
          title: '删除失败',
          icon:'error'
        })
        //后台可以查看详细的错误信息
        console.log(err)
      }else {
        var imageList = this.data.imageList
        imageList.splice(index,1)
        this.setData({
          imageList:imageList
        })

      }
    });
    }
  },

  bindContentInput(e){
    console.log(e)
    this.setData({
      content:e.detail.value
    })
  },

  // getLocation(){
  //   wx.chooseLocation({
  //     success:(res) => {
  //       this.setData({
  //         address:res.address,
  //         addressName:res.name
  //       })
  //     }
  //   })
  // },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    //第二种方法隐藏分享
  // wx.hideShareMenu({})

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
   
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  // onShareAppMessage() {

  // }
})